# 元字符匹配规则
# . 点的使用，匹配除了换行符之外任意的字符，\. 匹配点本身
# 字符串前的 r 表示这是一个原始字符串（Raw String），其作用是让字符串中的反斜杠 \ 保持原样，不会被当作转义字符处理。
import re
data='a1aaa'
names='李达','李明','小王','小李','小刘'
pattern='...'#匹配规则
pattern='李.'#匹配规则
for name in names:
    res=re.match(pattern,name)
    if res:
        print(res.group())
# [] 中括号的使用，匹配的规则是：匹配中括号中的任意一个字符
str1='elloh'
res=re.match('[ue]',str1)# 使用中括号括起来的内容，代表一个集合，可以匹配集合中的任意一个字符
print(res.group())
pattern='[abc]'
# pattern='[a-z]'# 可以简写成一个范围
datas='a','b','c','e','wyw'# 遍历后都在开头
for data in datas:
    result=re.match(pattern,data)
    if result:
        print('匹配成功%s'%result.group())
# \d 匹配一个数字 0-9
data='12345abcdef'
print(re.match('\d\d',data).group())
# \D 匹配一个非数字
data='w12345abcdef'
print(re.match('\D',data).group())
# \s 匹配一个空白字符，即空格，tab键
data='  hello'
print(re.match('\s\s',data).group())
# \S 匹配一个非空白字符
data='Python  hello'
print(re.match('\S',data).group())
# \w 匹配一个字母、数字、下划线或汉字，即a-z、A-Z、0-9、_
data='_1Python  hello'
print(re.match('\w\w\w\w',data).group())
# \W 匹配一个非字母、数字、下划线或汉字
data='@_1Python  hello'
print(re.match('\W',data).group())
# 限定符(匹配特定数量字符的规则)
# * 匹配前一个字符零次或多次(有多少匹配多少)
res=re.match('[A-Z][a-z]*','Any')
print(res.group())
# + 匹配前一个字符一次或多次(至少有一次)
res=re.match('[A-Z]+','MYnameisfjksg')#从字符串的起始位置匹配成功
print(res.group())
# ? 匹配前一个字符零次或一次，表示可选的
res=re.match('[a-zA-Z]+[0-9]?','na99m_e')
print(res.group())
# {max}匹配前一个字符max次
# {min,}max被省略表示匹配从min开始到最后所有的字符,即匹配前一个字符至少min次
# {min,max} 匹配前一个字符min次到max次,min和max必须都是非负整数
res=re.match('\d{4}','12345')
if res:
    print('匹配成功{}'.format(res.group()))
print(re.match(r'c:\\a.txt','c:\\a.txt').group())#在字符串定界符引号前面加上字母r或R，字符串将原样输出，其中的转义字符将不进行转义
# ^ 指定匹配必须发生在目标字符串的开始位置(匹配字符串的开头)，放在方括号中，表示排除的意思
print(re.match('^P\w{5}','Python is language').group())
# $ 指定匹配必须发生在目标字符串的结尾位置(匹配字符串的结尾)
print(re.match('[\w]{5,15}@[\w]{2,3}.com$','accountwywsq@qq.com').group())
# | 匹配左右任意一个表达式，或 的关系
string='wywsqpeng888'
print(re.match('(wywsqpeng|wywsqpeng888)',string).group())
# (ab) 将括号中字符作为一个分组
res=re.match('([0-9]*)-(\d*)','0355-456213987')
print(res.group(0))
print(res.group(1))
print(res.group(2))
# ^ 放在方括号中，表示排除的意思
res=re.match('([^-]*)-(\d*)','0355-456213987')
print(res.group(0))
print(res.group(1))
print(res.group(2))
# \num 引用分组num匹配到的字符串
htmlTag='<html><h1>测试数据</h1></html>'
res=re.match(r'<(.+)><(.+)>(.+)</\2></\1','<html><h1>测试数据</h1></html>')
print(res.group(1))
print(res.group(2))
print(res.group(3))
print(res.group())
# (?P<名字>) 给分组起别名
# (?P=名字) 使用别名
date='<div><h1>www.baidu.com</h1></div>'
res=re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>.*</(?P=h1)></(?P=div)>',date)
print(res.group())




